<?php
class MozgCfg
{
	static private $_allData = array();
	static private $_isDataLoaded = false;		

	protected function GetFile($id)
	{
		return _ROOT_PATH. 'config/' .$id. '.php';
	}
	
	/**
	 * 
	 * GetConfig($id [, $params, $params ...])
	 */	
    public function Get($id)
    {
        if (!isset(self::$_allData[$id])) 
        {
        	$configFile = self::GetFile($id);
        	if (is_file($configFile)) $value = include($configFile);  
        	else $value = array();      	     	
        	
        	self::$_allData[$id] = new MozgParams($id, $value);
        	
        	$args = func_get_args();
			array_shift($args); 
			call_user_func_array(array(self::$_allData[$id], 'AddData'), $args); 
        }

        return self::$_allData[$id];
    }

    public function GetProp($propPath)
    {
    	list($id, $prop) = explode('//', $propPath, 2);
    	
    	$cfg = self::Get($id);
    	if (!$cfg) return null;
    	return $cfg->Get((string)$prop);
    }

    public function SetProp($propPath, $value)
    {
    	list($id, $prop) = explode('//', $propPath, 2);
    	
    	$cfg = self::Get($id);
    	if (!$cfg) return false;
    	
    	$cfg->Set((string)$prop, $value);
    	return true;
    }    
    
    public function Save($id)
    {
    	$data = self::Get($id);
    	if (!$data) return false;

    	$configFile = self::GetFile($id);
    	if (is_file($configFile) && !is_writable($configFile)) 
		{
			throw new Exception('Невозможно записать в файл конфига ' .$configFile);
		}

		$path = pathinfo($configFile);
		if (!SysLoader::GetLibCollection()->dir->Create($path['dirname']))throw new Exception('Не удалось создать директорию конфига');
		
		$fileContent = '<?php return ' .var_export($data->GetOriginalData(), TRUE). ';';
		
		file_put_contents($configFile, $fileContent);
		
    	return true;
    }
    
    public function Delete($id)
    {
    	$configFile = self::GetFile($id);
		if (is_file($configFile) && is_writable($configFile)) 
		{
			unlink($configFile);
			return true;	
		}
    	
    	return false;
    }
}